package game;

import java.util.Objects;
import java.util.Random;
import java.util.Scanner;

import static game.BattleResul.handleBattleResult;
import static game.InventoryManager.useItem;
import static game.MonsterFactory.createMonster;
import static game.PlayerStatus.displayPlayerStatus;
import static game.Shop.enterShop;
import static game.SkillManager.useSkill;

public class MonsterGame {


    public static void main(String[] args) {

//        AudioPlayer.setVolume(-40, true); // 调小音量

        AudioPlayer.playSound("E:\\BaiduNetdiskDownload\\2023年短视频热歌\\where did u go.WAV", true, true, -15);
        // 在游戏启动时注册所有道具和装备
        GameInitializer.registerAllItems();

        // 游戏的其他启动逻辑
        System.out.println("游戏启动中...");

        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
        // 创建玩家
        Player player = new Player("宇宙创造神", 200, 35, 15, 30, 100, 80);  // 设置玩家属性

        while (player.hp > 0) { // 当玩家还有生命值时，继续战斗


            System.out.println("请选择你的行动：1. 探索 2. 休息 3. 查看装备和物品 4. 保存游戏 5. 开始战斗 6. 退出游戏 7. 设置音量");
            int actionChoice = scanner.nextInt();


            switch (actionChoice) {
                case 1:
                    // 实现探索逻辑
                    System.out.println("你开始探索周围的环境...");
                    break;
                case 2:
                    // 实现休息逻辑
                    System.out.println("你选择休息，恢复了一些生命值...");
                    break;
                case 3:
                    // 实现查看装备和物品逻辑
                    System.out.println("你查看了当前的装备和持有的物品...");
                    break;
                case 4:
                    // 实现保存游戏逻辑
                    System.out.println("游戏进度已保存...");
                    break;
                case 5:

                    System.out.println("你选择了开始战斗！");

                    game.Monster monster = createMonster(random); // 创建怪物


                    // 在战斗开始的方法中
                    Game.currentMonster = monster;

                    System.out.println("你遇到了一个 " + monster.level + "级" + monster.name + "！");

                    while (player.hp > 0 && monster.hp > 0) {
                        // 玩家回合
                        System.out.println("你的 HP：" + player.hp + "，" + monster.name + " 的 HP：" + monster.hp);
                        System.out.println("请选择你的行动：1. 攻击 2. 使用技能 3. 使用道具 4. 查看状态 5. 商店 6. 学习技能");
                        int choice = -1;
                        while (choice < 1 || choice > 6) {
                            if (scanner.hasNextInt()) {
                                choice = scanner.nextInt();
                                if (choice < 1 || choice > 6) {
                                    System.out.println("无效的选项，请输入一个有效的数字（1-6）：");
                                }
                            } else {
                                System.out.println("无效的输入，请输入一个数字：");
                                scanner.next(); // 清除无效输入
                            }
                        }
                        if (choice == 1) {
                            if (player.canAttack()) {
                                // 播放攻击音效，确保不循环播放
                                AudioPlayer.playSound("C:\\Users\\GeekGuru\\Downloads\\快速攻击音效.wav", false, false, -5);
                                // 玩家攻击
                                player.attack(monster);
                            } else {
                                System.out.println("你受到恐惧效果的影响，无法在这一回合攻击！");
                            }
                        } else if (choice == 2) {

                            // 玩家使用技能
                            useSkill(player, monster, scanner);

                        } else if (choice == 3) {
                            // 玩家使用道具
                            useItem(player, scanner);

                        } else if (choice == 4) {
                            // 查看状态
                            displayPlayerStatus(player, monster);

                        } else if (choice == 5) {

                            // 进入商店
                            enterShop(player, scanner);

                        } else if (choice == 6) {
//                    AudioPlayer.setVolume(-20, false); // 调小音量

                            AudioPlayer.playSkillLearnSound(); // 调用方法播放学习技能的音效

                            // 学习技能
                            System.out.println("请选择要学习的技能：1. 火焰魔法 2. 治疗魔法 3. 吸血术");
                            int skillChoice = scanner.nextInt();
                            player.learnSkill(skillChoice);
                            AudioPlayer.stopEffect(); // 假设这会停止当前的效果音

                            AudioPlayer.playSound("E:\\BaiduNetdiskDownload\\2023年短视频热歌\\精卫.WAV", true, true, -10);

                        } else {
                            System.out.println("无效的选项！");
                        }
                        player.reduceMagicCooldowns();

                        // 怪物回合
                        if (monster.hp > 0) {
                            AudioPlayer.playSound("C:\\Users\\GeekGuru\\Downloads\\刀刺音效.wav", false, false, -10);

                            monster.attack(player);
                            monster.useAbility(player); // 怪物使用技能
                            player.updateStatusEffects(); // 再次更新玩家状态效果


                        }
                    }

                    handleBattleResult(player, monster); // 处理战斗结果

                    break;
                case 6:
                    System.out.println("你选择了退出游戏。");
                    System.exit(0);
                    break;
                case 7:
                    System.out.println("设置音量：\n1. 背景音乐\n2. 效果音\n3. 静音背景音乐\n4. 静音效果音");
                    int volumeChoice = scanner.nextInt();
                    if (volumeChoice == 1) {
                        System.out.println("输入背景音乐音量（-80 到 6）：");
                        float bgVolume = scanner.nextFloat();
                        AudioPlayer.setVolume(bgVolume, true);
                    } else if (volumeChoice == 2) {
                        System.out.println("输入效果音音量（-80 到 6）：");
                        float effectVolume = scanner.nextFloat();
                        AudioPlayer.setVolume(effectVolume, false);
                    } else if (volumeChoice == 3) {
                        AudioPlayer.toggleMusicMute();
                        System.out.println("背景音乐静音状态已切换。");
                    } else if (volumeChoice == 4) {
                        AudioPlayer.toggleEffectMute();
                        System.out.println("效果音静音状态已切换。");
                    } else {
                        System.out.println("无效的选项！");
                    }
                    break;
                default:
                    System.out.println("无效的选项！");
                    break;
            }
        }
        System.out.println("游戏结束！");
        scanner.close();
    }

}
